{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Flax MNIST Example\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/google/flax/blob/main/examples/mnist/mnist.ipynb\" ><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n",
    "\n",
    "Demonstration notebook for\n",
    "https://github.com/google/flax/tree/main/examples/mnist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The **Flax Notebook Workflow**:\n",
    "\n",
    "1. Run the entire notebook end-to-end and check out the outputs.\n",
    "   - This will open Python files in the right-hand editor!\n",
    "   - You'll be able to interactively explore metrics in TensorBoard.\n",
    "2. Change `config` and train for different hyperparameters. Check out the\n",
    "   updated TensorBoard plots.\n",
    "3. Update the code in `train.py`. Thanks to `%autoreload`, any changes you\n",
    "   make in the file will automatically appear in the notebook. Some ideas to\n",
    "   get you started:\n",
    "   - Change the model.\n",
    "   - Log some per-batch metrics during training.\n",
    "   - Add new hyperparameters to `configs/default.py` and use them in\n",
    "     `train.py`.\n",
    "4. At any time, feel free to paste code from `train.py` into the notebook\n",
    "   and modify it directly there!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "outputId": "8520b2f8-2b9d-4216-ba1f-d96175455bbc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[?25l\r\n",
      "\u001b[K     |███▊                            | 10kB 21.5MB/s eta 0:00:01\r\n",
      "\u001b[K     |███████▍                        | 20kB 12.7MB/s eta 0:00:01\r\n",
      "\u001b[K     |███████████                     | 30kB 9.4MB/s eta 0:00:01\r\n",
      "\u001b[K     |██████████████▉                 | 40kB 8.4MB/s eta 0:00:01\r\n",
      "\u001b[K     |██████████████████▌             | 51kB 5.2MB/s eta 0:00:01\r\n",
      "\u001b[K     |██████████████████████▏         | 61kB 5.2MB/s eta 0:00:01\r\n",
      "\u001b[K     |█████████████████████████▉      | 71kB 5.7MB/s eta 0:00:01\r\n",
      "\u001b[K     |█████████████████████████████▋  | 81kB 6.3MB/s eta 0:00:01\r\n",
      "\u001b[K     |████████████████████████████████| 92kB 4.4MB/s \n",
      "\u001b[K     |████████████████████████████████| 634kB 8.5MB/s \n",
      "\u001b[K     |████████████████████████████████| 102kB 6.0MB/s \n",
      "\u001b[K     |████████████████████████████████| 61kB 6.3MB/s \n",
      "\u001b[?25h  Building wheel for flax (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
      "  Building wheel for jax (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
     ]
    }
   ],
   "source": [
    "# Install ml-collections & latest Flax version from Github.\n",
    "!pip install -q ml-collections git+https://github.com/google/flax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "example_directory = 'examples/mnist'\n",
    "editor_relpaths = ('configs/default.py', 'train.py')\n",
    "\n",
    "repo, branch = 'https://github.com/google/flax', 'main'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "cellView": "form",
    "outputId": "2dfbdfa6-d213-4b5b-dc82-ee1765705255"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cloning into 'flaxrepo'...\n",
      "remote: Enumerating objects: 330, done.\u001b[K\n",
      "remote: Counting objects: 100% (330/330), done.\u001b[K\n",
      "remote: Compressing objects: 100% (298/298), done.\u001b[K\n",
      "remote: Total 330 (delta 58), reused 126 (delta 14), pack-reused 0\u001b[K\n",
      "Receiving objects: 100% (330/330), 1.81 MiB | 6.59 MiB/s, done.\n",
      "Resolving deltas: 100% (58/58), done.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<h1 style=\"color:red;\" class=\"blink\">WARNING : Editing in VM - changes lost after reboot!!</h1>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "      ((filepath) => {{\n",
       "        if (!google.colab.kernel.accessAllowed) {{\n",
       "          return;\n",
       "        }}\n",
       "        google.colab.files.view(filepath);\n",
       "      }})(\"/content/examples/mnist/configs/default.py\")"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "      ((filepath) => {{\n",
       "        if (!google.colab.kernel.accessAllowed) {{\n",
       "          return;\n",
       "        }}\n",
       "        google.colab.files.view(filepath);\n",
       "      }})(\"/content/examples/mnist/train.py\")"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# (If you run this code in Jupyter[lab], then you're already in the\n",
    "#  example directory and nothing needs to be done.)\n",
    "\n",
    "#@markdown **Fetch newest Flax, copy example code**\n",
    "#@markdown\n",
    "#@markdown **If you select no** below, then the files will be stored on the\n",
    "#@markdown *ephemeral* Colab VM. **After some time of inactivity, this VM will\n",
    "#@markdown be restarted an any changes are lost**.\n",
    "#@markdown\n",
    "#@markdown **If you select yes** below, then you will be asked for your\n",
    "#@markdown credentials to mount your personal Google Drive. In this case, all\n",
    "#@markdown changes you make will be *persisted*, and even if you re-run the\n",
    "#@markdown Colab later on, the files will still be the same (you can of course\n",
    "#@markdown remove directories inside your Drive's `flax/` root if you want to\n",
    "#@markdown manually revert these files).\n",
    "\n",
    "if 'google.colab' in str(get_ipython()):\n",
    "  import os\n",
    "  os.chdir('/content')\n",
    "  # Download Flax repo from Github.\n",
    "  if not os.path.isdir('flaxrepo'):\n",
    "    !git clone --depth=1 -b $branch $repo flaxrepo\n",
    "  # Copy example files & change directory.\n",
    "  mount_gdrive = 'no' #@param ['yes', 'no']\n",
    "  if mount_gdrive == 'yes':\n",
    "    DISCLAIMER = 'Note : Editing in your Google Drive, changes will persist.'\n",
    "    from google.colab import drive\n",
    "    drive.mount('/content/gdrive')\n",
    "    example_root_path = f'/content/gdrive/My Drive/flax/{example_directory}'\n",
    "  else:\n",
    "    DISCLAIMER = 'WARNING : Editing in VM - changes lost after reboot!!'\n",
    "    example_root_path = f'/content/{example_directory}'\n",
    "    from IPython import display\n",
    "    display.display(display.HTML(\n",
    "        f'<h1 style=\"color:red;\" class=\"blink\">{DISCLAIMER}</h1>'))\n",
    "  if not os.path.isdir(example_root_path):\n",
    "    os.makedirs(example_root_path)\n",
    "    !cp -r flaxrepo/$example_directory/* \"$example_root_path\"\n",
    "  os.chdir(example_root_path)\n",
    "  from google.colab import files\n",
    "  for relpath in editor_relpaths:\n",
    "    s = open(f'{example_root_path}/{relpath}').read()\n",
    "    open(f'{example_root_path}/{relpath}', 'w').write(\n",
    "        f'## {DISCLAIMER}\\n' + '#' * (len(DISCLAIMER) + 3) + '\\n\\n' + s)\n",
    "    files.view(f'{example_root_path}/{relpath}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "outputId": "e9061488-ac3e-4d23-f24f-06e1988e7541"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/content/examples/mnist\n"
     ]
    }
   ],
   "source": [
    "# Note : In Colab, above cell changed the working directory.\n",
    "!pwd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports / Helpers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from absl import logging\n",
    "import flax\n",
    "import jax.numpy as jnp\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow_datasets as tfds\n",
    "\n",
    "logging.set_verbosity(logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Helper functions for images.\n",
    "\n",
    "def show_img(img, ax=None, title=None):\n",
    "  \"\"\"Shows a single image.\"\"\"\n",
    "  if ax is None:\n",
    "    ax = plt.gca()\n",
    "  ax.imshow(img[..., 0], cmap='gray')\n",
    "  ax.set_xticks([])\n",
    "  ax.set_yticks([])\n",
    "  if title:\n",
    "    ax.set_title(title)\n",
    "\n",
    "def show_img_grid(imgs, titles):\n",
    "  \"\"\"Shows a grid of images.\"\"\"\n",
    "  n = int(np.ceil(len(imgs)**.5))\n",
    "  _, axs = plt.subplots(n, n, figsize=(3 * n, 3 * n))\n",
    "  for i, (img, title) in enumerate(zip(imgs, titles)):\n",
    "    show_img(img, axs[i // n][i % n], title)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Local imports from current directory - auto reload.\n",
    "# Any changes you make to train.py will appear automatically.\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "import train\n",
    "from configs import default as config_lib\n",
    "config = config_lib.get_config()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "outputId": "bb4525f4-8ca4-4e9d-d1cc-48a3e0533645",
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:absl:Load pre-computed DatasetInfo (eg: splits, num examples,...) from GCS: mnist/3.0.1\n",
      "INFO:absl:Load dataset info from /tmp/tmpqyu1t56xtfds\n",
      "INFO:absl:Field info.citation from disk and from code do not match. Keeping the one from code.\n",
      "INFO:absl:Generating dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1mDownloading and preparing dataset mnist/3.0.1 (download: 11.06 MiB, generated: 21.00 MiB, total: 32.06 MiB) to /root/tensorflow_datasets/mnist/3.0.1...\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:absl:Dataset mnist is hosted on GCS. It will automatically be downloaded to your\n",
      "local data directory. If you'd instead prefer to read directly from our public\n",
      "GCS bucket (recommended if you're running on GCP), you can instead pass\n",
      "`try_gcs=True` to `tfds.load` or set `data_dir=gs://tfds-data/datasets`.\n",
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1c176027dbbf459b8ed946ccc58de845",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, description='Dl Completed...', max=4.0, style=ProgressStyle(descriptio…"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:absl:Load dataset info from /root/tensorflow_datasets/mnist/3.0.1.incompleteJ6TJES\n",
      "INFO:absl:Field info.citation from disk and from code do not match. Keeping the one from code.\n",
      "INFO:absl:Constructing tf.data.Dataset for split train, from /root/tensorflow_datasets/mnist/3.0.1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001b[1mDataset mnist downloaded and prepared to /root/tensorflow_datasets/mnist/3.0.1. Subsequent calls will reuse this data.\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:absl:Constructing tf.data.Dataset for split test, from /root/tensorflow_datasets/mnist/3.0.1\n"
     ]
    }
   ],
   "source": [
    "# Get datasets as dict of JAX arrays.\n",
    "train_ds, test_ds = train.get_datasets()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "outputId": "89de05b0-aede-414f-cf43-5e7c71871140"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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3z+HDx9uslWrVpnshBNOMNnmzZsDq0sc7kwBAAAAQACaKQAAAAAIQDMFAAAAAAFopgAAAAAgAAMoUkDnzp1N9txzz5msV69eJnv00UcTUhNwQIUKFUz24IMPmuywww4zWZcuXUy2f//++BSGrHLeeed587/97W9xvU7Pnj1NlpeXZ7KxY8fG9boAEA/HHnusyXyDIS655BKTlS9fPvKavmzhwoUmu+qqq0zmGwh09NFHR6qHARQAAAAAkCFopgAAAAAgAM0UAAAAAASgmQIAAACAAAygSAFdu3Y1me/hvBo1apREOchiqmqyhx9+2GTdu3ePtN6IESNMtmDBguIXhqziG2YydOhQ77G+B6vjbciQISZjAEV6mzt3rsnatWtnspEjR5rslltuSURJwP9Xrlw5kx1zzDEmmzBhgsl+9atfmaxKlSom873PLA7f+4WTTz45pjXTFXemAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIABFCWsfv36JuvYsaPJ5s+fb7Knn346ITUBB5xwwgkmizpsYsuWLSZbv359zDUh+7zwwgsma9GihffYqA9R+wafNGvWLNK5ZcrwR2W68D0Uf/zxx5vM95D+/v37TXbTTTeZbN++fSabPn26yYram19//bU3P9hZZ51lsmOPPdZkS5YsMdnMmTNNtmfPnkjXRcny/T997rnnTObbs1G9++67Jvv2229NNmPGDO/5mzZtMtns2bOD6/FZsWKFyXbt2hXXayQKd6YAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQIOOfqvU9jOoT60+CjuqPf/yjyXJyckz23XffmWzZsmUJqQk44NJLLw0+94cffjAZexY/59prrzVZu3btYlrT9/2zbdu2JvMNuujQoYPJfAMojjvuOJP5HuhGyWrSpInJPv300+D1fH8+33LLLZGyZHr77bdN1qlTJ5Nt3LixJMpBAd/AsaKGPhxs69atJps7d67JRo8ebTLfAIriuPLKKyMdt23btkjHVa5c2WRvvvmmyTZv3hxpvWTjzhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACZPwACt+DzGPHjjXZH/7wB5N98MEHca/H93Csz4IFC+J+beDn3HTTTZGO27t3r8lGjBgR73KQYa666iqTjRs3zmRly5aNvObixYtNdu6555rM92D0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uSa78847vcdeeeWVJitqKNDBvv76a5P9/ve/N9nevXsjrYf0VrZsWZO99NJLJuvYsaPJfHuuqO/Rffv2NdnmzZujlOjVvHnzSMd9/vnnJsvLywu+bqJwZwoAAAAAAtBMAQAAAEAAmikAAAAACEAzBQAAAAABMmoARUno2rWryYp6cPSjjz5KdDnAf2nXrl1M50+ePDkudSD9+H5KfVEP0Efx7LPPxlJOZN27dzfZHXfcYbLSpUsHX+P222832bfffhu8HtLbSSedZLKRI0ea7LzzzvOeH3XYxIsvvmgy35Ch5cuXR1oP6eOoo44ymW8A2uWXXx7p3J9++slkvj3ry0REdu7c6c2j8A3B6t27d6RzR4wYYbJUHK7CnSkAAAAACEAzBQAAAAABaKYAAAAAIADNFAAAAAAEYABFMbVt29ZkRT1M+tZbbyW6HGSxk08+2WSNGjWKdK7vJ6Qju61evTqu6+Xk5JjsmmuuMdkpp5xismXLlpmsqOEqbdq0iXRtn/3795vMN4hjzJgxkdZD5qlTp47JJk2aZLIWLVrEdJ2+ffuabMKECTGtidRToUIFkz344IMm69Gjh8miDi554403TDZo0CCTTZs2LdJ6sWrSpInJfO9VVqxYYbKZM2cmpKZ4484UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAjCA4hCaN29usjJl7Jfstdde857/wQcfxL0m4IBx48aZrGzZspHOHTp0aLzLAf7LgAED4rpeqVL+v/vzDZHwWbNmjcn++te/muzee+8tXmHIaDfddJPJWrZsaTLfcIBt27Z517zllltMNnHixIDqkMp+/etfm8z357ZvCI+qmsz3/WrYsGEm27hxY9QS465evXommzFjhsl8n99dd91lss2bN8ensATjzhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACMIDiEEaOHGmyypUrm6x9+/be83v37m0yfqI5QlSqVMlkxx57bKRzfQ+j5uXlxVwTMovvJ8379skJJ5xQEuUYvgf8RUTWrVtnskceecRkkyZNMtmSJUtirguZw/cAvG8AhW8v+h6UHzRokPc6Dz/8cEB1SDeXXHKJyXyDzYr63nawL7/80mS+96S+IRCJcNppp5nMt+erVatmsm+//dZkvu/b6YI7UwAAAAAQgGYKAAAAAALQTAEAAABAAJop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7OlHhf526qEY10RmSbU9KyJyseT/e/65cVgLmSfV9izvDfBzUmrPOufmSP7dsRki8qPkj0bvGsua6UCdy4o7cAAAAAAQV9l6ZwoAAAAAYkIzBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgABlinOwqjL6D8XinDv4h8eVKPYsios9izS0zjlXM1kXZ88iAHsW6abIPcudKQAA0tvSZBcAFBN7FummyD1LMwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQIBi/dBeAAAAANmjfPnyJjvnnHNM1r9/f5P99a9/NdlHH31kslWrVgVWl3zcmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAEAABlAAAAAA8Bo/frzJevToEenc1q1bm2zChAkmu/HGG4tfWIrgzhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACMIAigcqVK2eyd99912THHnusyTp06GCyTz75JD6FIWU88MADJjvllFMinfvqq6+abOnSpSZbvXq1yWbPnh3pGgCA1NG4cWOTLViwwGQfffSRyc4444yE1IT0lJOTYzLfexIRkauvvtpkzrlI19mzZ4/JPvjgg0jnpgvuTAEAAABAAJopAAAAAAhAMwUAAAAAAWimAAAAACAAAygSqHr16iZr3rx5pHMnT55sspYtW5rsp59+KnZdSDzf8BHfTxDv2bNn8DVatWplMt8Dofv37zfZxx9/7F3ztttuM9lrr70WUB0AIN5at25tstKlS5vspJNOMtlxxx1nsm+//TY+hSHtXH/99Sa75pprYlrTNwTr7rvvNtlTTz0V03VSDXemAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIABFAl0xx13BJ9bpUoVk9WsWdNky5cvD74GEufPf/6zyWIZNuET9aePlypl/87k1FNP9R7rG5LRpUsXkxU1wAJIlDZt2njz+++/32THH3+8yfr372+yCRMmxF4YkCAdO3Y0mW9IUJky9q3cjh07TLZr1674FIa04/v+2a9fv5jW9A0v6dChg8mWLVsW03XSAXemAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIABFHHQqVMnb96rVy+TRR0akJeXZzKGTaSP2rVrRzpu+vTpJlu4cKHJtm3bZrInn3zSZOXKlTOZ7yeNn3baad56jjvuOJM98sgjJmvZsqXJ9u3b510Tma9SpUom27t3r8l8++ukk04ymW9/FjWAokmTJlFKlFatWpmMARRIFaVLlzZZnz59TFa3bl2T+b73vvnmmyZbsWJFYHVIJ1WrVjXZ0KFDTZabmxt5zTVr1pisW7duJsuGYRM+3JkCAAAAgAA0UwAAAAAQgGYKAAAAAALQTAEAAABAAAZQxEHjxo1jOt/3UGjPnj1jWhPJ5Xuw/YcffjDZqFGjTBbvQQ7t2rUz2auvvuo99pxzzjFZs2bNTPaHP/zBZOPHjy9+cc5TUHEAACAASURBVEgZhx12mMlmzpwZ6dzdu3ebrEGDBiarVauWycqXL28yVTVZ1OE9Rdm6dWtM5wOJ5BsQ8Jvf/CbSuR999JHJrrrqqphrQnoaN26cyVq3bm2y4nxP9Q2dYqDJf3BnCgAAAAAC0EwBAAAAQACaKQAAAAAIQDMFAAAAAAEYQBEHsT7o+cgjj5hs9erVMa2J5Prss88iZcly9913e3PfsIqcnByTDRkyxGSvvPKKyXxDN5CaKlSoYLIzzjjDZLEMh9i1a5fJtm3bZrLHH3/cZIcffrh3zcsvv9xkpUuXNplvSAaQDL6hVTfffHOkc30DinzDK5KlRYsWJvv444+TUEl2uO6660zWuXPnSOfu2bPHZH379vUey7CJQ+POFAAAAAAEoJkCAAAAgAA0UwAAAAAQgGYKAAAAAAIwgKKYunTpYrKGDRvGtOayZctiOh8ornfeecebjx492mT/+7//a7IjjzzSZLm5uSZjAEX62Lp1q8kuuOCCuF5jyZIlJtuyZYvJVq5cGXnNU0891WQNGjSIdB0gkQ477DBvfvvtt0c+9mBTp0412axZs4pXWALt2LEj2SVklYceeshkUQcCPf/88yabNGlSzDVlI+5MAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIAADKIppyJAhJitVKnpPunbtWpNNnz49ppqAeHn55ZdN5htA4dOkSROTzZs3L+aaUDJ2795tsldffTUJlfhVq1bNm/se3FdVk/mGXwCJdOGFF3rzK664ItL5GzZsMNnDDz8cU02JlpeXl+wSMpZvAFpUvj+L+/btG0s5KIQ7UwAAAAAQgGYKAAAAAALQTAEAAABAAJopAAAAAAjAAIpiql69ekznjx071mRbtmyJaU0gFfgetvb9dPZ9+/aVRDnIMMcff7w3r127tsmccyY788wzTfb444/HXhggIu3atTPZlClTIp/v27P9+/c32TvvvFOsupA5Bg8ebDLfsB2ft956y2S894wf7kwBAAAAQACaKQAAAAAIQDMFAAAAAAFopgAAAAAgAAMoDuHKK6802ZFHHhn5/G3btplszJgxMdUEJNLatWtNtm7dOpMdccQRJmvQoIHJcnJyTLZz587A6pDNmjRpEtP5ixYtilMlgHXbbbeZrFy5cpHPHzdunMmKM8ACmaVZs2Ymq1+/vsl8g0t82UsvvRRTPVWrVjXZOeecY7Lf//73JitfvrzJnnnmGZM98sgjgdUlH3emAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIABFIdw9tlnm6xUqej95969e022Z8+emGpC+qpWrZrJateuHelc31765ptvYq7pYDVr1jSZb9iEz9ixY03GsAnES6wDKBLx+wXZqXfv3iZr3bp15POXLl1qsltvvTWmmpBZfO8XDjvssEjn5uXlmWzx4sUm8w2IOv30071rTps2zWS+oRRRtWnTxmS+oRt9+vQJvkZJ4s4UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAEAApvkV8E0RufDCC03mnIu85qhRo2KqCemrY8eOJvNNu2vUqFGk9Xbv3m2yO++802QzZ8402cKFCyNdQ0TkoosuinzswRYtWhR8LjKPby/5JvJ9//33JuvWrZvJGjduHFM948aNM9kpp5xisttuuy2m6yCz1KpVy2R/+ctfTFa2bFmT+aawioiMHj3aZFu2bAmoDrB80/x8k6R9k/Luvfde75qqarLivB+OokuXLibzfd/2fX7Jxp0pAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABGAARYGGDRuarGrVqjGtOWPGjJjOR/p6+eWXTVamTPhvt5ycHJMNGzbMZLfffrvJXnnlFZMVtTf//Oc/R6rH9zDrTz/9FOlcZJ6JEyea7PLLLzdZxYoVI60X68POvoEtvt9DQGG+79FTpkwxWf369SOtV9RQnvHjxxevMCBGDzzwgMmuueaamNb0vc95++23TVbUUIuDValSxWQ1a9YsfmFJwJ0pAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABGAARQKdfvrpJvvss8+SUAlK2ooVK0wW9aHlVatWmcz3IPM555xjMt9D9pdcckmkrDgWL15ssg8//DCmNUM1b97cZHXr1jWZ72FZxMfdd99tsjp16pjsuOOOM9m6detM5htAUa9ePe+1jzrqKJPNmTPHZL6BGFu3bvWuiex00kknmezcc8+NdO7evXtNdtddd8VcE3CA7/uiL7v00kvjfu3u3bubbObMmSbz/Tnrq9GnVKn0vb+TvpUDAAAAQBLRTAEAAABAAJopAAAAAAhAMwUAAAAAARhAUeCKK66I+5qjRo0y2YQJE+J+HaSeoUOHmuzhhx82WZky9rfg/PnzTXb99debrHz58ibz/fRx3yCAWDVs2NBkvqEbeXl5JjvhhBPiWku1atVM5nvg9bDDDovrdfEfS5YsMVnHjh1NVrlyZZNFHQLhGyoh4h9A0bhx4+DrIHsNGTIk+Nz77rvPZC+++GIs5SCLrV271mRbtmwxWZUqVUzmnAu+Ru/evb3H+oZbPffccyZr3bp1cD2vv/66yRYuXBjp3GTjzhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACaNQHw0REVDX6wWnm008/NdnJJ58c05rbt283me8B7EzmnIv2o68TJJX27JlnnmmyRx991GTHHntspPXef/99kzVr1sxkFSpUiLReOvjhhx9M5hu6MWbMGJMtWLAg0jXYs8mXm5trskWLFnmP9Q0WWblypcnq1q0bc10pbL5zrkWyLp6Oe7ZFC/vlmjdvnsmifv8844wzTPbOO+8Uv7DswZ4tJt9wiHHjxpks6vv6PXv2mGzz5s3eY2vWrBl8HZ+NGzearF69eibbuXNn8DUSoMg9y50pAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABCiT7AIyGT/9HIXNnTvXZP379zfZ6NGjTeZ7IL9Vq1aRrrt7926T+QauiIgMGzbMZF999VWk6/j07NnTZL6fpD5//nyTffTRRybbtGmTydatWxdYHVLVL3/5S5P5Bk0U5YUXXohnOchAAwYMMFnUYRNvvPGGyT788MOYawIOZcKECSbzDaCIqmzZsiY74ogjgtcT8Q+1eP75503Wt29fk6XYsIli4c4UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAmTlAIq2bduazPfAc1SfffaZN7/qqquC10R2+Pvf/x4pa9asmcmaNm0a6Rrz5s0z2ZIlSyKdG6vBgweXyHWQWXwDV1Q18vmrVq2KYzVId0ceeaTJog7w8bnnnntM5nvwHki0W2+91WR33XVX3K+zceNGk02dOtVkEydONNnChQvjXk+q4c4UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAmTlAIrDDjvMZDk5OcHrzZgxI5ZygJ+1YMGCSBmQCY444giTOecinz937tx4loM0V716dZPVq1cveL39+/fHUg4QNyNGjIiUIbG4MwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAAWTmA4vXXXzfZzTffbLKzzz7bZN9++63J3nrrrfgUBgCQRo0aRT52yZIlJvvss8/iWA3S3ffff2+yBx980GR9+vQx2YYNG0y2bNmy+BQGICNwZwoAAAAAAtBMAQAAAEAAmikAAAAACEAzBQAAAAABtDg/VV5Vox8MiIhzTpN5ffYsios9m3xPPvmkybp27eo99osvvjBZ06ZN415TipvvnGuRrIuzZxGAPYt0U+Se5c4UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAApRJdgEAAIR64YUXkl0CACCLcWcKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAAdS56D8Emp8YjeJyzmkyr8+eRXGxZ5GG5jvnWiTr4uxZBGDPIt0UuWe5MwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQACaKQAAAAAIQDMFAAAAAAHKFPP4dSKyNBGFICPVT3YBwp5F8bBnkY6SvW/Zsygu9izSTZF7Vp1zJVkIAAAAAGQE/pkfAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQIKuaKVVdoqodIhznVLVB4DWCzwUOxp5FumHPIt2wZ5Fu2LOpJauaqVSmqs1VdZ6qblPVNap6U7JrAn6Oquao6pequjzZtQCHoqqzCr6/HnjtVtVFya4LKAp7FulGVfup6nequkVVV6rqWFUtk+y6Eo1mKgWo6hEi8qqIPCwih4tIAxF5LalFAdEMFJG1yS4C+DnOuY7OuUoHXiLynog8n+y6gKKwZ5GG/i4izZ1zVUTkJBE5WUT+mNySEi8rmylVPVVV31fVTaq6SlXHqWrOQYedX9Bdr1PV0apaqtD5PQv+Nn6jqs5W1foxltRfRGY7555yzv3knNvqnPsyxjWRQVJwz4qqHiMi3UVkRKxrIfOk4p4ttHauiJwhIk/Ea02kP/Ys0k2q7Vnn3LfOuU0HlheR/ZJ/gyCjZWUzJSL7RKSfiBwhIq1EpL2I9DnomE4i0kJEmovIRSLSU0REVS8SkcEi8jsRqSkib4vIVN9FVPWWgg3ufRU69H9EZIOqvqeqP6rqK6paL26fLTJBqu1ZEZEHCtbdGY9PEBknFffsAVeJyNvOuSWxfILIOOxZpJuU27Oq2lVVt4jIOsm/M/VwfD7VFOacy5qXiCwRkQ6e/GYRebHQr52InFfo131E5M2Cj2eJyDWF/lspEdkhIvULndugmHV9IyKbRKSliJQXkftF5N1kf714Jf+Vwnu2k4jMKvi4nYgsT/bXildqvFJ1zx5Uy2IRuTrZXyteqfFiz/JKt1ea7NmGInKXiByV7K9Xol9ZeWdKVRup6j9UdXVB9zxc8rv6wpYV+nipiNQu+Li+iNxXqBvfIPm3MuvEUNJOyd/8HznndonInSJymqpWjWFNZJBU2rOqWlFERkkW/DtohEulPXtQXa1F5CgRmRbrWsgs7Fmkm1TdsyIizrl/i8gXIvJgPNZLZVnZTInIBBH5SkQauvyH5AZL/gYqrG6hj+uJyMqCj5eJSC/nXLVCrwrOufcOvoiqDtb/nsTzX69Ch34m+X8DcIAT4L+l0p5tKCK5IvK2qq4WkekicnTBN/PcOH2+SH+ptGcL6yEi051zvv+G7MaeRbpJ1T17QBkROS74s0sT2dpMVRaRLSKyTVUbi0hvzzEDVbW6qtYVkZtE5NmC/CERGaSqJ4qIqGpVVb3UdxHn3HBXaBLPwa9Chz4uIp1UtZmqlhWRISLyjnNuc3w+XWSAVNqzn0v+N+dmBa9rRWRNwcfLfOsiK6XSnpWCdSqIyGUiMjkunyEyDXsW6Sal9qyqXquqRxZ8fIKIDBKRN+P1yaaqbG2mBohIVxHZKiKPyn82VmEvi8h8EVkgIjNEZJKIiHPuRREZKSLPFNxS/VxEOsZSjHNujuT/bcIMEflR8iefdI1lTWSclNmzzrm9zrnVB16S/08D9hf8el/ousg4KbNnC7lY8p9PnRuHtZB52LNIN6m2Z08XkUWqul1EZha8Bse4ZspT5/gXZQAAAABQXNl6ZwoAAAAAYkIzBQAAAAABaKYAAAAAIADNFAAAAAAEKFOcg1WVaRUoFufcwT/voESxZ1Fc7FmkoXXOuZrJujh7FgHYs0g3Re5Z7kwBAJDelia7AKCY2LNIN0XuWZopAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQIAyyS4AIp9++qnJnnjiCZONHTu2JMoBAAAAEAF3pgAAAAAgAM0UAAAAAASgmQIAAACAADRTAAAAABCAARQl7IEHHjBZ3bp1TfbUU0+VRDkAAAAAAnFnCgAAAAAC0EwBAAAAQACaKQAAAAAIQDMFAAAAAAEYQJFAV199tcn69OljsrFjx5rsxx9/TERJSANnnnmmyfbs2WOyefPmmezKK680GcNMAADIXr73o0ceeaTJqlat6j1/8ODBka4zZMgQk+3evdtkTz75pMlWrVoV6RqpiDtTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACKDOuegHq0Y/GPLll1+a7KijjjLZ2WefbbKPP/44ITWVNOecJvP6qb5np0yZYrLLLrvMZL7fpxUqVDDZ008/bbJu3boFVped2LNIQ/Odcy2SdXH2LAKwZw8hJyfHZL4/y0eMGGGy0qVLm6xatWqRjispmzdvNtkjjzxiskcffdRkixcvTkhNERS5Z7kzBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgABlkl1AJhg0aJA3P/744032xz/+0WSZMmwCxffVV1+Z7McffzRZvXr1SqIcIKEqVqxoslq1apnM932yKN27dzdZjRo1Ip377LPPmuy6664z2bZt2yLXA/wc3/CgDh06mGzatGkmK1PGvm275ZZbTDZ69OjA6pAKypcvb7JJkyYl/LqffvqpN1+xYoXJGjZsaDLf+16fqlWrmmzgwIEmO//8803WpEmTSNcoSdyZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQAAGUBRT27ZtTfaXv/zFe+wnn3xisqlTp8a9JqQv308vL1XK/h3H3XffHWm9H374IeaagOJq06aNyc477zyTnXXWWSZr2bKlyVTVZM65yPVEPfayyy4z2RtvvGGyknjwG5mnUaNG3nzIkCEm69KlS6Q1fXu7adOmxSsMKW/fvn0m+/DDD0126qmnmsz3/XPz5s0mW7x4sckuuOACbz1RB2P5Mt8wlF//+tfe6xysTp06Jqtdu7bJVq5cGWm9ROHOFAAAAAAEoJkCAAAAgAA0UwAAAAAQgGYKAAAAAAIwgOIQatSoYbKHHnrIZKVLl/aef+2115ps/fr1sReGjLZly5bgc8eNGxfHSpDtjjzySJP93//9n8natWtnsqK+L4Z6/fXXvblv6Er58uVN1q1bt0jXyc3NLVZdgIjISSedZLK5c+d6j61evXpcr52XlxfX9ZB827dvN1mrVq1Mdu+995rs888/N5lv2MSmTZtM5hs0URTf915f5qvx+eefj3SNatWqmaxr166RrlGSuDMFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAAAygKFCqlO0rH3vsMZP5fqL573//e++aCxYsiL0wZB3fg8w+u3fvNtn+/fvjXQ6yxMUXX2yy22+/3WRNmzYNvsYnn3xisunTp5vs/vvvN9lPP/3kXXPv3r0mq1WrlsmiDqBAevP9WT5w4ECTvfnmmyb7+OOPTVamjH2bdN1115nsjjvuMJlviJWIyKJFi0x22WWXmWz+/PkmW7ZsmcmmTJnivQ4y34ABA5Jdws/yDQSKyjlnMt97n2TjzhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACMICiwODBg03229/+1mTjx4832RNPPJGQmoBDeeihh0y2atWqJFRStD/96U8m27x5s8kmTpxYEuXgEEaPHm2yY4891mTr16832dSpU032/vvvm2zu3LkmW7NmTdQSgZ9Vs2ZNkw0bNsxkP/74o8l8D8r/5S9/MVnHjh0j1TJq1ChvPm7cOJP5BllVqFDBZEOHDjXZypUrI9UDJNqQIUNM1q9fv+D11q1bZzLfgKJk484UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAmTlAIqjjz7aZP379zfZF198YbK77rorITUd7OKLLzaZ7+HYWbNmmcz3gD9SU7Vq1UzWpEmTJFSSGDfccIPJcnNzTbZixQqT+fY2EufWW281WcuWLU3mG3yyePHihNQU6vLLL092CUhxjz76aPC5vkEqvmETr7/+uvf8Fi1amMw36GLjxo2R1wQSqW3btibzDZj6zW9+E9frvvvuu3FdL1G4MwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAAWTmAYuLEiSbzDXfwPcTs+6npRfE9ZNqpUyeTDRgwwGQ5OTkmc86ZbNu2bSbzPQA4b968IutE8hx++OEma9WqVaRzS2oYSlQNGjQwWaVKlUy2du1ak61atSohNSG6Z599NlKWDurUqRN87r59++JYCUqa7/tLz549TeYbuFKjRg2TDRs2zGTjx4832e7du6OWKB06dDBZhQoVTOYbarF+/frI1wEOpXv37iYbMWKE91jfsKyKFSvGtZ4ePXqY7IUXXojrNRKFO1MAAAAAEIBmCgAAAAAC0EwBAAAAQACaKQAAAAAIkPEDKNq3b2+yc88912S+B/Hy8vJMVrp0aZPdcccd3msPGjTIZBs2bDCZ7yHTb7/91mS+wQTXXXedyS688EKTMYAi+XwPcBb1sGcUW7ZsiaWcuPM9VF2zZk2T+fbiggULElITMp9vaEDfvn2D13vwwQdjKQdJtn//fpM98cQTkbJ4833/ExHp1atXpPPHjBkTz3KQxXzDhDp27Ggy39CoWPkGt/neu7711lsm27FjR9zrSQTuTAEAAABAAJopAAAAAAhAMwUAAAAAAWimAAAAACBARg2gqFy5sskeffRRk3355ZcmmzNnjslq165tsieffNJkZ555preeN99802SdO3c22ebNm73nR+F7iG/dunXB6yFxGjdubLJLL700CZUULScnx2QnnHCCyc4++2yT9ezZMyE1AYfyu9/9zmTly5ePdO7cuXNNtmnTpphrAkREevTo4c3r1q1bwpUg2/kGSyRi2ITP22+/bbJXXnmlRK5dUrgzBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQIKOm+XXp0sVkubm5Jjv11FNNVq9ePZM9/fTTJmvQoIHJHnvsMW89N954o8l27tzpPTYKX92+yX1TpkwJvgYSp2vXrsHnzp4922RHHXWUyfbv32+yfv36mcw3qVJEpEKFCia76KKLopQIpB3f76vdu3cnoRJkogsuuCDysc8995zJdu3aFc9ykMWuueYak3Xr1s1kN998s/f8qlWrmqykpgGmA+5MAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIEBGDaDo37+/ydasWWOyrVu3mmzOnDkmO/roo012++23m+yvf/2rt55Yhk10797dZL4HCEeMGGGy1atXB18X8XHSSSeZ7JJLLgle79xzzzXZ0qVLI53rnDPZnj17vMdu3rzZZDfddJPJOnToYLILL7wwUj1APLVt29Zkqhrp3Hnz5sW7HGSp3/72tyZr166d99ivv/7aZL6BVb6BQkAI3/vCMWPGRMpERO677z6T+fasT7NmzUxWv359k0V9T5OKuDMFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAABk1gKJixYomW7t2rcn27dtnMt+widtuu81kf/vb30y2ffv2qCV6dezY0WTDhw832cyZM012zz33xHRtJMYxxxxjstq1a8f1Gr494ntgefHixSabMmVKTNe+//77TeYb7MJPSEe81KhRw5ufdtppJvMNXfnmm28iZUAI3yCqogZIvPvuuyZbv3593GtCYvi+5yxYsMBkO3bsKIlyUt5xxx1nslq1apmMARQAAAAAkGVopgAAAAAgAM0UAAAAAASgmQIAAACAABk1gCKqTZs2maxXr14me+aZZ0y2bdu2mK7dqVMnk/l+srRvaMDAgQNNtmvXrpjqQWLMmjXLZO+//77JWrVqZbJ58+aZbOzYsSZ7+eWXTeZ78B7IBPfee683z83NjXT+xo0bI2XAz6lfv77JKleubDLfUB4R/wAfpI+5c+eazDdUZPTo0SbzvTdIB0OGDDHZjTfemIRKUhN3pgAAAAAgAM0UAAAAAASgmQIAAACAADRTAAAAABAgowZQ7Nmzx2THHHOMyX7xi1+Y7PHHHzfZ3r17TaaqJqtevbq3Ht9gic6dO5ts2rRpJhs0aJDJli9f7r0OUo9v7/j+35cvX95k69atM9mWLVviUxiQBmrUqGGy008/PfL527dvN1nv3r1jqgnZqUwZ+zbJ9+D94YcfbrKnn37au+bChQtjLwxJ880335isXbt2JmvZsqXJ7rzzTpNNnTrVZCtWrAgrLkH69euX7BJSGnemAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAECCjBlB07drVZLNnzzbZJ598YrIPPvjAZJ9//rnJfAMt2rdv763n+++/N9mVV15pMt8ACmSelStXJrsEIC3cfPPNJmvQoEHk830DKHjoHyEaN25sMt/+9JkxY0a8y0EKGD58uMkmT55ssooVK5ps1KhRJrv++utN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gWYKAAAAADzQTAEAAACAh7gbQOEaNrFs2TKVVaxY0XuNCxcuqOzixYve18tI7ty5VZYrl+5fy5Urp7K5c+eqrHr16tEpDHGjYMGCKqtcubLKNm3apLIiRYqorE2bNiobNGiQylx/zkREjhw5orJ3331XZa6H9N98802VHT58WGU//vijyp566imV3X333SobPny4ylzvD4i9kiVLqsz1/6pGjRoRreN6765bt6539tBDD6ns+PHjntUhTFwDUlxfdx944AGV9enTR2VXXXWVc51//vOfKrvhhhtU1qxZM5WtXr1aZefOnXOuA2Ql13CISIZNhBl3pgAAAADAA80UAAAAAHigmQIAAAAADzRTAAAAAOAh7gZQVKhQQWVlypRRWUpKisq2bt2qsqlTp6rso48+Utl3330XtMTAkpKSVBb0YXnX5+waGrBt27bMF4aYuOKKK1TmGtrgerj5888/V1mJEiVUFnRIibXWmRctWlRlvXv3DnTNJ598UmV79uxR2d69e1XmGgTgMmvWLJXVqVNHZcnJyYGuh+goVaqUyhYvXqyySIZNfPPNN8785MmTKrvppptUlieP/nLnesD/3nvvVdmMGTOClIg4lTdvXpVdffXVKps3b57KbrnlFu91M3qfve222wId63rff+utt1T26KOPqsz1PRLgyzVYYsiQIdlfSJzizhQAAAAAeKCZAgAAAAAPNFMAAAAA4IFmCgAAAAA8xN0AihUrVqhs0aJFKnMNY6hZs2ZWlOStWrVq3udu2LBBZQybCLd+/fqpzDVswqVRo0Yqcz0U/+tf/zrzhaUTdNiE66Fs18P8ZcuWVVm5cuVU5nr42pX16dNHZbt27cqwTkSfazjO/PnzVXbjjTcGup5rgIRrbz/zzDPO848ePaqy+vXrq2z58uUqy507d5ASESLXX3+9ykaPHq2y+++/33uNHTt2qOzcuXOBzx81apTK7rrrLpXdfvvtKuvSpYvKli5dqrL33nsvcD3Az3ENm3ANpYi2oUOHZvka0cCdKQAAAADwQDMFAAAAAB5opgAAAADAA80UAAAAAHgwGf2EbufBxgQ/OIpcP5H+tddeU1njxo1Vlh0Pp+fJ457j4XpI1fXwtkupUqVUduDAgcwVFgestSaW68dqz7qsWrVKZbfeemugc1evXq2yli1bqiy79kjt2rVVtm7dukDnnjp1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",
      "text/plain": [
       "<Figure size 1080x1080 with 25 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_img_grid(\n",
    "    [train_ds['image'][idx] for idx in range(25)],\n",
    "    [f'label={train_ds[\"label\"][idx]}' for idx in range(25)],\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get a live update during training - use the \"refresh\" button!\n",
    "# (In Jupyter[lab] start \"tensorboard\" in the local directory instead.)\n",
    "if 'google.colab' in str(get_ipython()):\n",
    "  %load_ext tensorboard\n",
    "  %tensorboard --logdir=."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "outputId": "a0eb78b5-ee73-4f4f-8400-41b521f42b75",
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:absl:Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Field info.citation from disk and from code do not match. Keeping the one from code.\n",
      "INFO:absl:Reusing dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n",
      "INFO:absl:Constructing tf.data.Dataset for split train, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Constructing tf.data.Dataset for split test, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:train epoch: 1, loss: 0.2352, accuracy: 92.94\n",
      "INFO:absl:eval epoch: 1, loss: 0.0592, accuracy: 98.00\n",
      "INFO:absl:train epoch: 2, loss: 0.0584, accuracy: 98.15\n",
      "INFO:absl:eval epoch: 2, loss: 0.0575, accuracy: 98.14\n",
      "INFO:absl:train epoch: 3, loss: 0.0423, accuracy: 98.66\n",
      "INFO:absl:eval epoch: 3, loss: 0.0357, accuracy: 98.78\n",
      "INFO:absl:Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Field info.citation from disk and from code do not match. Keeping the one from code.\n",
      "INFO:absl:Reusing dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n",
      "INFO:absl:Constructing tf.data.Dataset for split train, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Constructing tf.data.Dataset for split test, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:train epoch: 1, loss: 0.2745, accuracy: 91.83\n",
      "INFO:absl:eval epoch: 1, loss: 0.0478, accuracy: 98.36\n",
      "INFO:absl:train epoch: 2, loss: 0.0508, accuracy: 98.42\n",
      "INFO:absl:eval epoch: 2, loss: 0.0382, accuracy: 98.81\n",
      "INFO:absl:train epoch: 3, loss: 0.0374, accuracy: 98.85\n",
      "INFO:absl:eval epoch: 3, loss: 0.0264, accuracy: 99.09\n",
      "INFO:absl:Load dataset info from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Field info.citation from disk and from code do not match. Keeping the one from code.\n",
      "INFO:absl:Reusing dataset mnist (/root/tensorflow_datasets/mnist/3.0.1)\n",
      "INFO:absl:Constructing tf.data.Dataset for split train, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:Constructing tf.data.Dataset for split test, from /root/tensorflow_datasets/mnist/3.0.1\n",
      "INFO:absl:train epoch: 1, loss: 0.2676, accuracy: 91.85\n",
      "INFO:absl:eval epoch: 1, loss: 0.0485, accuracy: 98.57\n",
      "INFO:absl:train epoch: 2, loss: 0.0483, accuracy: 98.54\n",
      "INFO:absl:eval epoch: 2, loss: 0.0461, accuracy: 98.64\n",
      "INFO:absl:train epoch: 3, loss: 0.0341, accuracy: 98.91\n",
      "INFO:absl:eval epoch: 3, loss: 0.0396, accuracy: 98.74\n"
     ]
    }
   ],
   "source": [
    "# 3x 3 epochs trains in ~1 minute in the GPU Colab...\n",
    "\n",
    "# We don't use TPUs in this Colab because we do not distribute our\n",
    "# training using pmap() - if you're looking for an example using TPUs\n",
    "# checkout below Colab:\n",
    "# https://colab.research.google.com/github/google/flax/blob/main/examples/imagenet/imagenet.ipynb\n",
    "\n",
    "config.num_epochs = 3\n",
    "models = {}\n",
    "for momentum in (0.8, 0.9, 0.95):\n",
    "  name = f'momentum={momentum}'\n",
    "  config.momentum = momentum\n",
    "  state = train.train_and_evaluate(config, workdir=f'./models/{name}')\n",
    "  models[name] = state.params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "cellView": "form",
    "tags": []
   },
   "outputs": [],
   "source": [
    "if 'google.colab' in str(get_ipython()):\n",
    "  #@markdown You can upload the training results directly to https://tensorboard.dev\n",
    "  #@markdown\n",
    "  #@markdown Note that everbody with the link will be able to see the data.\n",
    "  upload_data = 'no' #@param ['yes', 'no']\n",
    "  if upload_data == 'yes':\n",
    "    !tensorboard dev upload --one_shot --logdir ./models --name 'Flax examples/mnist'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "outputId": "3af424f7-4433-475d-817c-5c0bbc4599ae"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0126"
      ]
     },
     "execution_count": 13,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Find all mistakes in testset.\n",
    "logits = train.CNN().apply({'params': state.params}, test_ds['image'])\n",
    "error_idxs, = jnp.where(test_ds['label'] != logits.argmax(axis=1))\n",
    "len(error_idxs) / len(logits)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "outputId": "949487f5-8aa2-45c8-9b54-efbf34ab58f1"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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NWqUyXyDS3y1dMopp5isa9euJps2bZrJWrZsWeA6gUQbPXq0ya6//nrvtr4bmU866SSTbdiwodDrQua57bbbTFanTh2T1atXL/Ixr7zySpPt2LHDZD169Ih8TKAoPffccybzDZvwZT6pPGzChytTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACJBWAygqVqxosj/84Q8mGzlypMl2794dabubbropcHVF4/zzzzeZ74bs9u3bF8dycAQ9e/Y0WZcuXUx23XXXmezf//63yS655BKTrV69OtJaPvjgg0jbAYmwdu1ak/lugBYRufnmm01WtmzZeC8JGWr9+vUm69+/v8mefPJJk2VlZUU+T4MGDWJbGFAEChq81qhRI5OpaqRjLlq0yGQzZsyIbWFJjitTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACJBWAyhq165tsgkTJphs9uzZJhs0aJDJtm7dajLfzc6JdOedd5rM90nqK1euLI7l4Ah8n/j9008/mWzatGkmW7VqlckOHjwYn4XlU6IE/76C5LRixYpELwEQEZE33njDZMOGDTPZmDFjIh/zzDPPNFnbtm1N9tZbb0U+JhCrhx56yJtXrlzZZM65SFkm4J0TAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAqTsAIqKFSuabOTIkZH2/ctf/mKy4447zmSvvfaayb799luTjRs3LtJ5C+vGG280Wbt27Uzmuzl2y5YtRbImRLdkyZJIWXGYP3++N+/bt6/JHnnkEZNl6k2mAODz+uuvm6xLly7ebZs2bWqy8uXLm+zhhx82GQMoEC9ZWVkmu+iii7zb+n7mq2qk83Tt2jW2haUgrkwBAAAAQACaKQAAAAAIQDMFAAAAAAFopgAAAAAgQMoOoBg6dKjJLr30UpP5hkP4hjE8+eSTJtu2bZvJWrVqFel4heW7MfCOO+4wWZkyZUz26KOPxn09SC/vvfeeN3/qqadMdswxx5hs586d8V4SAKSEU0891WSnnXaaydatW+fd/9e//nWk85QrV85kxx57rMl4Pcb/xfee8s033zRZQcOlog6dmjJlislWrlwZad9UxpUpAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABKCZAgAAAIAAKTHNr1q1aibr0aOHyZYsWWKy+fPnm2zatGkmO3DggMl+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AADxU7p0aZP99re/Ndm9997r3b958+Ymy8nJMdmoUaNMds8995hs//793vMAAACkA65MAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIIA656JvrBp9Y0BEnHOayPOnS81Wr17dZNdee63JLrnkkkhZQVTtf66orxENGzY02dKlSyOfO1lQs0WnQoUKJrvtttsi7duqVStvfv7555vsoYceipRt37490rlTwELnXJNEnTydazaqJk3st3/kyJHebVu0aGGyefPmmezyyy832c6dOwNWl5SoWaSaAmuWK1MAAAAAEIBmCgAAAAAC0EwBAAAAQACaKQAAAAAIkNABFJUrVzZZlSpVTPbzzz+bbNOmTSbLycmJz8IQN9zMH7vmzZub7B//+IfJTj755LifuzADKIYNG2ayIUOGFHpNxY2ajY+6deuabMGCBSYrV65cpOP5alMken3u3r3bZAMGDDDZuHHjIh0vyXAzfzHyvfa+9957JqtVq5Z3/6g16xvOMmHChEj7pgBqFv9L7dq1TdaxY0eTnXvuuSbz/WwZM2ZMfBb2HwygAAAAAIB4opkCAAAAgAA0UwAAAAAQgGYKAAAAAAKUTOTJJ0+ebLJKlSqZbM6cOSZbtGiRySZOnBifhQFFoHr16ibz3WDcp08fk5UqVcpksQyPOZzv/z0RkTPPPNNkZ5xxRqRj1qxZM3g9SG2+wUHjx483WdRhE0WhbNmyJnvwwQdN1rp1a5O1b9++SNaE5HfWWWeZbNKkSSaL5fVv165dJqtQoYLJ9u3bF/mYQLKqU6eOyfr27Wuy7t27m6xECXvNZ+3atSabOnVq2OLihCtTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACJDQARRlypQxWYMGDUy2ZMkSk/k+Bdx3E/Tf/va3wNUB8fXYY4+ZLN43to8aNcpkDz30kMmys7O9+2dlZZls5syZJvMNpfB9Uvldd91lsm3btnnPjdRw/PHHm+zFF180WbNmzYpjOYVSunRpk/l+jiAznHrqqSabNWuWyXw18ssvv5jshhtu8J7n008/NVmTJk0infvKK680mW+40TPPPGOyH3/80bseIMQ555xjsieeeMJkjRo1MlnJkrb92L9/v8l87/VHjx5tMt9QiuLElSkAAAAACEAzBQAAAAABaKYAAAAAIADNFAAAAAAESOgAiokTJ5rsvPPOM1mXLl0iHe8vf/mLyS6//HKT+W4KXb9+vclq165tsp9//tlkGzdujLQ+ZA7fjcwNGzY0mapGOt53331nspYtW5ps+fLlkY5XkK1bt5ps7NixJvPdZFq2bFmTtWjRwmQvv/xy4OqQDDp06GAy33/nqA4cOGCyQYMGmez999/37u+7Ib9v377B60FmqFGjhskWLVpksnLlykU6Xs+ePU02adKkyOtZs2aNyW6//XaTjRkzxmS+nyM5OTkm8w1BAvLzvXcR8ddO8+bNTXb00UebzFefq1atMln37t1NVtDrfrLhyhQAAAAABDZduXYAACAASURBVKCZAgAAAIAANFMAAAAAEIBmCgAAAAACJHQAxccff2yyDRs2mOykk06KdLxf/epXJrvwwgtNNm3aNJP5bnLz3Qznu0n0X//6l3c9vk8vnz59unfbePI958aNG5vMN1gAsTvmmGNM9tZbb5ns5JNPNplzzmTbtm0zWVEMm4jq1VdfNZnvxugzzzzTZL66YwBFavMN8CmMr776ymS+T7gviG9oEfB/uf/++01Wvnz5SPtec801Jotl2ISP78b/W2+91WS+m/l92Ycfflio9SD91alTx2RPPvmkd9tmzZpFOuaLL75ospkzZ5rslVdeMdnu3bsjnSMZcWUKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAARI6gGLJkiUma926tcnuu+8+k3Xs2NFkJUpE6w1PP/30SJmP74a9O++807vtnj17TLZ//36TTZkyxWQrV640WfXq1U1WsWJFk5UqVcpkTz/9tHeNKDzf4JNTTjkl+Hi+G6OLa9iEz4EDB0w2b948k/kGUAD5rVixwmTt27cv1DE7d+5cqP0P5xsAg9TWpEkTk/kGqfgGAo0fP95kvqE8sfANuvCdx/e+xLdG3w3+ixcvDlwd0lHt2rVN5ntfePHFF3v3972fvfbaa032+uuvm8z3vjfdcGUKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAARI6gMLHN3jh6quvNlnLli1N1q9fP5OddtppJitXrpzJqlSpEnWJkR1zzDEm27Fjh8neffddk/luRn3iiSdMVqFChUhrKehTrVF4f/3rX4P3/frrr03m+wTxeCtoWMQdd9xhsgsvvNBkvv+vfOrXr2+yTp06mcz3aehIP2vWrDHZ2rVrI+17+eWXe/Nzzz23MEsyxowZE9fjoXiVLVvWZI8//nikfffu3WuyUaNGmcw3lMenWrVq3tz389j3niaqhQsXmiwnJyf4eEhtHTp0MNmgQYNMlpWVZbIhQ4Z4jzl37lyTzZ49O2B16YkrUwAAAAAQgGYKAAAAAALQTAEAAABAAJopAAAAAAiQdAMoopo1a1akzMd3U7zvhr1LL73UZFWrVjVZLAMDbr/9dpOVLGn/M7z99tuRjqeqJvN9QjqKzhlnnBG874cffmiyH3/8sTDLMXzDJt555x3vtr76Lkw9tW3b1mRt2rSJlD3wwAMmizqsAPFxzjnnmOzkk08OPt6GDRuC923cuLE3L1WqVPAxv/zyS5OtWrUq+HhIvIYNG5os6pCSoUOHmmzdunWR9j377LNN9tRTT3m3LaiWQy1dujSux0Pq6N69u8lGjx5tsqlTp5rsb3/7m8mopTBcmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAECAlB1AURjLly+PlI0dO9ZkvmERO3fujHzuVq1amWz69OmR9z+cbzjA008/bTLf80N8fPDBByZr0qRJpH19A0QKw3fztW+YSZUqVbz7lyhh/30lJyen8AvL56ijjjLZ9ddfHyl74YUXTHbdddfFY1nwqF27tsmOP/744OMdc8wxJitTpozJBg8ebLL+/ft7j1mYASkbN26MlCF1dOzYMXjfJ554wmQVK1aMdI4RI0aYrKD/VwpTs998843JZs+eHXw8pLYBAwaY7P333zfZ+PHjTcawifjhyhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQICMnOYX1U8//RRpu0qVKnnz0qVLR9rWN9nnu+++M5lvAptvkqBvCuGBAwe8a0Th+f77RZ3WVJipTr/61a9MNm7cOJNVrlw58nn37dtnsvfee89kzz//fIQVijRu3Nhk11xzjckKmi54uN/+9rcmO/XUU022evXqSMfDkU2dOtVkCxcuNFnU6ZWdO3eOlPn4Jk2KFG7a5KBBg4L3RXK64IILTOabmurLJkyYYLI2bdqYrEKFCpHWsmTJEm/um2pZs2bNSMf86KOPTLZp06ZI+yK1+aarZmVlmcz3HnD+/PlFsibk4soUAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAjCAIkann366yV577TXvtnXr1o10zF9++cVk48ePN1mvXr1M1rt3b5MtXbo00nkRH6+++qrJ+vTpE2nfli1bmqxhw4YmW7x4scl8tXjeeedFOm9BBg4caLLRo0cHH++FF14w2bPPPmuyRx991GS/+c1vTHbKKaeY7O233zZZnTp1oi4RMSrMwJXCKGjQRHGcG6mjf//+Jps1a1akfa+88spI223evNlkzzzzjMnuv/9+7/4PPvigyW677bZI5/70008jbYf0s3XrVpN99tlnJtuwYUNxLAf5cGUKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAARhAEaOOHTuaLOqgiYL4hkjUqFHDZJUrVw4+x29/+1uTlS9f3mQzZswIPkemWrlypcm++eYbk/mGJ5xwwgkmmz59usmqVasWuLrYFGbYRFS+YRqdO3c22bx580zm+37VrFkzPgtDJCNHjjTZK6+8koCVANacOXNMdvPNN5usb9++JsvOzjaZ72fipEmTTOb7OVCQBg0aRNpu9+7dJps2bVrk8yC9/Pzzzyb7/PPPTda2bVuTffnll0WyJuTiyhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACMIDiCK655hqT3XvvvQlYSS7fp6736NHDZL6bFCdOnGiyUqVKmaxcuXKBq8tcP/zwg8kGDx5ssmHDhpnMNzyhSpUqJluzZo3JBg0aFHWJkd1yyy0mmzBhQtzPc7gWLVqYLOrAleJYH/7Dd0N+69atTearJZ+zzz7bZLVr1459YQF8w398w1CQOg4ePGiyJ598MlIWb7Vq1fLmTZs2jbS/b1jP6tWrC7MkpJkNGzaYrLBD0RA7rkwBAAAAQACaKQAAAAAIQDMFAAAAAAFopgAAAAAgAAMo8rRp08Zk9evXN1np0qXjfu7x48eb7P333zeZb2DEhRdeaLILLrjAZFu2bDFZhw4doi4RMXrppZdMdsUVV5jsxBNPNFnJkvZ/S98N+S+++GLg6gr24IMPmmzlypUmW7FiRaTjNWnSxGS+T2e/+eabIx1v7969JnvzzTcj7Yv48A24mTVrVqTMp169eiZbunRp7AsL4Bv2AsRLQUNYypYtG2n/hQsXxnM5SENfffWVyXzvXVG0uDIFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAAAygyOMbQNG1a9diObfvZv4ZM2aYbO7cuSZ7/vnnI53j6quvNtn8+fMj7Yv4+MMf/mCyYcOGmaxfv34my8nJMZlzLj4Ly8d3Y/Q777wT13OoqsmiPhffsJa33nqr0GtC4mzatClh527UqJHJGjZsaLLFixcXx3KQZqpXr+7Nfa+BPps3b47ncpCGeL1KDlyZAgAAAIAANFMAAAAAEIBmCgAAAAAC0EwBAAAAQAAGUOR5+OGHTdazZ0+T+QYB7N+/33vMf//73yZ77bXXTDZnzhyTrVu3znvMUA888EBcj4f4eOyxx0z2008/max79+4mO/nkk4tkTcli+/btJhs3blwCVoJ0ValSpUgZEE++gTt79+41me89BDJXrVq1TOYbbHXnnXcWw2qQH1emAAAAACAAzRQAAAAABKCZAgAAAIAANFMAAAAAEIABFHl8Ax86dOhgMt8nmv/9738vkjUh/fk+4X7EiBEme+aZZ0x27bXXmuySSy4xWcuWLcMWV4x27NhhslGjRpls7dq1xbAaACi89u3bR952w4YNJlu2bFk8l4MU169fP5N98sknJps2bVpxLAf5cGUKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAARhAcQR8+jiShW9QxciRI002ZswYkx1zzDGRz9O8eXOTNW7cOPL+UXzwwQcm++ijj0z2/fffx/W8SE7OOZPt27fPZKVLl477ub/88kuTrVq1Ku7nQWaqUKGCN49a80htRx11lMlKlrRvu0uUsNc1Lr/8cpO1a9fOZF9//XXg6hBPXJkCAAAAgAA0UwAAAAAQgGYKAAAAAALQTAEAAABAAAZQAGnkl19+Mdl3330Xef+XX345UgbEy65du0zWtm1bk7377ruFOs+yZctMNmLECJNt3LixUOcBDpk9e7Y3P+uss0w2ZMiQol4Oiln79u1NNn78eJNlZWWZTFVN9vnnn5vshhtuCFwd4okrUwAAAAAQgGYKAAAAAALQTAEAAABAAJopAAAAAAigvk/iLnBj1egbAyLinLN3URYjahaxomaRghY655ok6uTULAJkZM3OmTPHZDVq1DDZTTfdZLKZM2cWyZoQWYE1y5UpAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABCiZ6AUAAAAA6e6iiy5K9BJQBLgyBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQgGYKAAAAAALQTAEAAABAAJopAAAAAAhAMwUAAAAAAUrGuH22iKwrioUgLdVM9AKEmkVsqFmkokTXLTWLWFGzSDUF1qw654pzIQAAAACQFvg1PwAAAAAIQDMFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIADNVByp6lpVvTTR6wCiomaRaqhZpBpqFqmGmo0NzVSCqer1qnpQVX/K92ie6HUBBVHV61R1oar+qKobVfVBVS2Z6HUBUajqLFV11CySnar2VtUtea+1/1DV0oleE1AQzTVUVb9V1R9U9T1VPTPR6yoONFMFKOYftB8558rne7xXjOdGmijGmi0rIneISBUROU9EWopI32I6N9JIcTc0qtpZREoV5zmRXoqrZlW1tYj0l9zX15oiUltE7iuOcyO9FOPrbCcR+ZOIXCQix4nIRyLyfDGdO6EyrpnKu3Q5QFWXq+oOVZ2oqmVUtXnev7L3U9UtIjJRVUuoan9VXaOq21X1ZVU9Lt+xuqrquryvDUrg00IaS7aadc5NcM7Ncc7tc859KyIvisgFcXq6SAPJVrN5xzlGRIaIyN1xeIpIM0lYs9eJyNPOuWXOuR0i8oCIXF/4Z4p0kYQ1e4qIzHXOfe2cOygiL4hI/Tg81aSXcc1Uns4i0lpE6ojI6SJyT15eTXK76ZoicpOI3C4iV4hIMxGpLiI7RGSciIiq1heRCSLSNe9rlUXkxEMnUNU/qurOIzxOzreec1U1W1W/UtXBxf2vtUgJyVaz+V0sIsvi+myRDpKtZofnHWtLUT1hpLxkqtkzReTzfGv7XESqqmrlInjeSF3JVLMviUgdVT1dVUtJ7j8ITC/C5548nHMZ9RCRtSJyc76/txORNSLSXET2iUiZfF9bISIt8/39BBHZLyIlReReEXkp39fK5e1/aYzrqS253XwJEWkgIstFZECiv088kueRbDV72Nr+JCIbRaRKor9PPJLnkWw1KyJNRGRx3jFriYgTkZKJ/j7xSJ5HEtbsGhFpk+/vpfLqtlaiv1c8kuORhDV7tIiMzavTAyLyjYickujvU3E8MvUKyIZ8f14nuZ24iMg259zefF+rKSJTVTUnX3ZQRKrm7fM/x3HO/ayq22NdiHPu63x//UJV7xeRu0RkRKzHQlpLmpo9RFWvkNw6vdQ5lx16HKStpKhZVS0hIuNF5M/OuQOqGsvuyCxJUbN5fhKRivn+fujPuwKOhfSVTDV7r4g0FZGTJPc3ALqIyLuqeqZzbnfA8VJGpv6a30n5/nyyiGzK+7M7bLsNItLWOXdsvkcZl3ufyOb8x1HVspJ7afTQ3zvr/57Qd/ijoF+ZciLCT3scLqlqVlXbiMiTInK5c+6L+D5VpIlkqdmKkntlalLe/QOf5O2+UVUviuszRqpLlpoVyf3V6XPynfMcEdnqnAv+BzCkpWSq2YYiMsk5t9E5d8A594yIVJIMuG8qU5upnqp6oubefDdIRCYVsN3jIjJMVWuKiKhqlqr+V97XJovIZap6oaoeLSL3S77vp3PuRfe/J/Qd/lifd8y2qlo178/1RGSwiLxWFE8aKS2ZavYSyR060dE5t6Boni7SQLLU7A+S+y+vDfMe7fJ2bywi8+P8nJHakqVmRUSeE5EbVbW+qh4ruffCPBP3Z4xUl0w1+4mIdFLVqpo78KKr5P566ur4P+3kkqnN1D9FZIaIfC25v186tIDtxorI6yIyQ1V3icjHkjsKWpxzy0SkZ96xNkvuzXwbA9bSUkSWqOrPIvKmiEyR3BulgfySqWYHi8gxIvJmvn+ZeivgOEhvSVGzLteWQw8R2Zb3pa3OuX2xPSWkuaSo2bzjTBeRB0Vktoisl9xf4RoS63GQ9pKmZkVkpOQOSlksIjtFpLfk/qPrzoBjpRR17vArgelNVdeKSDfn3MxErwWIgppFqqFmkWqoWaQaajZ5ZOqVKQAAAAAoFJopAAAAAAiQcb/mBwAAAADxwJUpAAAAAAgQ04f2qiqXsRAT51xCPzOLmkWsqFmkoGznXFaiTk7NIgA1i1RTYM1yZQoAgNS2LtELAGJEzSLVFFizNFMAAAAAEIBmCgAAAAAC0EwBAAAAQACaKQAAAAAIQDMFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAADRTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACEAzBQAAAAABaKYAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQgGYKAAAAAAKUTPQCABS/nJwcbz5lyhSTqarJli9fbrLBgwcXfmEAAAAphCtTAAAAABCAZgoAAAAAAtBMAQAAAEAAmikAAAAACKDOuegbq0bfOIldf/31JuvZs6fJ9uzZY7Lhw4ebbPr06XFZVzpyztnpBcUoXWo23g4ePOjNfa8HvgEUvu06depksqlTpwasLrGoWaSghc65Jok6ebrUbNWqVU12yy23mKx58+Ym27Rpk8kKen+1ZcsWk915550RVphWqNk4KFeunMnq1atnsu7du0c6XlZWljf31XJ2drbJfD/z33777UjnTgEF1ixXpgAAAAAgAM0UAAAAAASgmQIAAACAADRTAAAAABCgZKIXUNQmTJhgsqOOOspkv//970123HHHmWzKlCkmO/HEE73nfuqpp6IsESh2vpuqCzJ06FCTVa5c2WQDBw40WSoOoEDsfK+LHTp0iLTv3LlzTdauXTuT7dq1K/aFASJSq1Ytk914440m69Gjh8l87wOiDuWJxbHHHmuyu+++22Tbt28v1HmQGnyDIHyvqX/+859NVrduXZNFrVnfdrFs261bN5Oly3CqI+HKFAAAAAAEoJkCAAAAgAA0UwAAAAAQgGYKAAAAAAKk1QAK341vxx9/vMn+8Ic/mGz//v0m++6770zWpIn98ONTTz016hKBpPD3v/898raNGjUyme//NWQu383JUW/Iv+CCC0y2du1ak40aNcq7/7PPPmuyTZs2RTo3MsO8efNMVrVq1eDj7d6922S+wRAFDafyuf766022evVqk40YMSLyMZG6evXqZTLfkKfCDpYI3S6WbZ944gmTrV+/3mQLFy6MfO5kw5UpAAAAAAhAMwUAAAAAAWimAAAAACAAzRQAAAAABEirARR/+tOfTHbppZeazDdsIqozzjjDZPXr1/duu2TJkuDzAMnMd+PpnDlzErASJIO//e1vJuvQoUPw8SpVqmSyYcOGebdt3769yQYPHmyymTNnBq8HqaNx48Ymq1atmsl8N+l/9dVXJnvggQdM9t5775ls3759Jjv77LO9a5w6darJKlSoYDJfHZ900kkmu/XWW73nQeryDZuIOtQn3tsV9piVK1c2mW+IFQMoAAAAACDD0EwBAAAAQACaKQAAAAAIQDMFAAAAAAFSdgBFixYtTPbZZ5+ZzPdJ5YXhu/mzb9++3m2ff/75uJ4bSATfIAHfTaZTpkwpjuUgCX3++ecme+ONN0x2+eWXRzpex44dTTZy5Ejvtuedd57J/v3vf5usc+fOJnv11VcjrQepwze0oUQJ++/GOTk5Jtu7d6/JfLW0a9euSGuZPXu2Nz/22GNNdt9995nsnnvuMVmPHj1MdtRRR0XaDqkjas36hkFlZ2ebbP369YVaT7169UxWrly5SPv61phuuDIFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAACk7gOJ3v/udydauXVvk5/XdeHrKKad4t61fv77Jli9fHvc1AUVp6tSpJuvevbvJ5s6dWxzLQRLas2ePyTZv3hx8vAULFpjslltu8W47evRok5199tkmGzBggMl8AwK+//77KEtEkjr33HNN5rtx3/ez/IEHHoi0XVHwDVi55JJLTPab3/zGZDfeeKPJfANgfMM0kHi+IU++mvUNfpozZ47J+vTpY7JFixYFri7Xc889ZzLfUB/fGjMBV6YAAAAAIADNFAAAAAAEoJkCAAAAgAA0UwAAAAAQIGUHUDRt2tRky5Yti+s5srKyTDZ8+HCTTZs2zbu/75PYr7nmmsIvDCgkX22L+G/S990cyyAVFLdZs2Z588cff9xk48ePN1mjRo1Mdscdd5js3nvvDVgdEqFly5YmK+i17XBffPGFyXzDdorL7t27TfbQQw+Z7JVXXol0vNNOO63Qa0LxWLFihclmzJhhsq5du5osOzs7+Ly+/1d69erl3dY3bEJVI53Ht11h1p2MuDIFAAAAAAFopgAAAAAgAM0UAAAAAASgmQIAAACAACk7gMJ3Y+a4ceNMFvUTzX2fmv7oo4+a7MUXXzTZvHnzvGv03TB91llnmWzp0qXe/YFY1axZ02Tbtm0zWZcuXbz7//nPfzaZ78boTp06BawOiKZVq1Ymmzhxonfbjz/+uKiXgyR19913m+zoo49OwEqKxubNm4P37datm8kefvjhwiwHRWTlypUma9u2bVzPcdNNN5mse/fuJvMN6hERcc5FOo9vO99glxEjRkQ6XqrgyhQAAAAABKCZAgAAAIAANFMAAAAAEIBmCgAAAAACpOwAirfeestkb7/9tsm++eYbk23dutVkO3bsMFnv3r1NVtCwCZ8JEyaYbMiQISa76qqrTBb1Zj8gvwULFpisT58+Juvfv793f1/dDR8+3GS+G2aBeHnyySdNVqZMGe+2H330UVEvBylEVSNlY8eOLY7lxJ3vufhUqFChiFeCZNC4cWOTvfnmmybLysoyme/nfdT6imXbW265xWS+wVapjCtTAAAAABCAZgoA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uV7rYjFy5EiV3X777YGysF4/Y7DaWqtfJJIk1dfstGnTVDZ48GCVffbZZyrLyspKSE1gzYatSZMmKnviiSec+3bu3FllGzduVNnOnTtV9umnn6rsrrvuClJiqil2zXJnCgAAAAA80EwBAAAAgAeaKQAAAADwQDMFAAAAAB4ywi6gtDlw4IDKTpw44X0+16dVV6hQwft8SK46deqozPXw/Z133qky17CJffv2qWzixIkqe/fdd531uB7AbtiwoXNf4CTXJ9y7hk24Hlh+4IEHVFbSYROua48bN05lZ555pspatGihsggMoMAPcP1/1+X8889XWevWrVW2cuXKQOcbMGCAM7/ssstUtnr16kDnfOONN1TmGjKE0qt69eoq69Onj8pc7w1c7wFERC655BKV5eXlqez0009XWU5OjvOc6YQ7UwAAAADggWYKAAAAADzQTAEAAACAB5opAAAAAPDAAAogRNddd53Kxo8frzJr9Ye1f/zxxyobM2aMypYuXaoy1yefF6dRo0aB90X6cz1g3KxZs0DHuh543r59e4lrOpXrYWvXsAmXLVu2xLschGzPnj2B9nOt7T/96U8qW7Nmjcp2796tsr59+zqv43o9D2rKlCkqu/baa1W2atUq72sgOlxr7LbbblOZa+jJHXfcobI333zTeZ3jx4+r7IwzzlBZuXLlnMenO+5MAQAAAIAHmikAAAAA8EAzBQAAAAAeaKYAAAAAwEPaD6CoUqWKyurUqaOy7OzsQNk777yjsrVr1zqvvX//fpVlZWWpzPUQH9JPZmamykaNGqUyY4zK8vPzVda9e3eV7d2717O64q+9cOFC7/NVq1ZNZd988433+RA+1+vVRRddpLIdO3ao7LXXXktITaeqV69eoP2+/vprlS1btize5SBkU6dOVZnr9Xjw4MEqq169uso6dOgQ6LoHDhxw5q73Bm+88YbKXINUatWqpbL27durjAEU6ce1Rpo3b66ybt26qWzz5s1xr+eSSy5RWd26dVX285//XGUjRoxQ2aZNm+JTWAi4MwUAAAAAHmimAAAAAMADzRQAAAAAeKCZAgAAAAAPkR1A4XrguXbt2ipzPXjaokUL7+u6HqRzPbQvIpKbm6sy10OvFSpUCHRt13W2bt2qsk8//TTQ+ZBcP/3pT1V23nnnqezbb79VmetTzksybMI10EJEZN68eSqb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",
      "text/plain": [
       "<Figure size 1080x1080 with 25 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Show some of them.\n",
    "show_img_grid(\n",
    "    [test_ds['image'][idx] for idx in error_idxs[:25]],\n",
    "    [f'pred={logits[idx].argmax()}' for idx in error_idxs[:25]],\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
